/*
题目描述
和所有人一样，奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师 Hei 想建造围有漂亮白色栅栏的三角形牧场。她拥有 n 块木板，每块的长度 l 
i
​
  都是整数，她想用所有的木板围成一个三角形使得牧场面积最大。

请帮助 Hei 小姐构造这样的牧场，并计算出这个最大牧场的面积。

输入格式
第 1 行：一个整数 n；

第 2 到第 (n+1) 行，每行一个整数，第 (i+1) 行的整数 l 
i
​
  表示第 i 块木板的长度。

输出格式
仅一个整数：最大牧场面积乘以 100 然后舍尾的结果。如果无法构建，输出 −1。
*/
#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define all(rq) rq.begin(),rq.end()
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)

using namespace std;
const int INF=0x3f3f3f3f;
bool judge(int a,int b,int c){
	if(a+b>c&&a+c>b&&b+c>a){
		return true;
	}
	
	return false;
}

int main(){
	int n;
	cin>>n;
	
	vector<int> a(n);
	
	int maxsize=0;
	for(auto &it:a){
		cin>>it;
		maxsize+=it;
	}
	
	vector<vector<bool>> f(maxsize+1,vector<bool> (maxsize+1)); //f[i][j] 表示是否可以第二和第三条边的边长为i和j 因为所有木板都得用完所以第一条边边长为maxsize-i-j
	f[0][0]=true;
	
	for(int k=0;k<n;k++){
		auto temp=f;
		
		for(int i=0;i<=maxsize;i++){
			for(int j=0;j<=maxsize;j++){
				if(temp[i][j]||(i>=a[k]&&temp[i-a[k]][j])||(j>=a[k]&&temp[i][j-a[k]])){ //如果前k-1本来就可以构建出i和j 或 前k-1可以构造出i-a[k]和j 则将当前边放在第二条边 第三条也一样
					f[i][j]=true;
				}
			}
		}
	} 
	
	double maxsquare=0;
	bool flag=false;
	for(int i=0;i<=maxsize;i++){
		for(int j=0;j<=maxsize;j++){
			if(!f[i][j]){
				continue;
			}
			
			int a=i,b=j,c=maxsize-i-j;
			
			if(!judge(a,b,c)){
				continue;
			}else{
				flag=true;
			}
			
			double p=(a+b+c)*1.0/2;
			
			double currsquare=sqrt(p*(p-a)*(p-b)*(p-c));
			maxsquare=max(currsquare,maxsquare);
		}
	}
	
	if(!flag){
		cout<<-1<<endl;
		return 0;
	}
	ll ans=maxsquare*100;
	cout<<ans<<endl;
	return 0;
}